import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'auth_provider.dart';

class ErrorHandlerState {
  final bool hasUnauthorizedError;
  final String? errorMessage;

  const ErrorHandlerState({
    this.hasUnauthorizedError = false,
    this.errorMessage,
  });

  ErrorHandlerState copyWith({
    bool? hasUnauthorizedError,
    String? errorMessage,
  }) {
    return ErrorHandlerState(
      hasUnauthorizedError: hasUnauthorizedError ?? this.hasUnauthorizedError,
      errorMessage: errorMessage ?? this.errorMessage,
    );
  }
}

class ErrorHandlerNotifier extends StateNotifier<ErrorHandlerState> {
  final Ref _ref;

  ErrorHandlerNotifier(this._ref) : super(const ErrorHandlerState());

  void handleUnauthorizedError() {
    print('🔒 处理401未授权错误');

    // 清除用户登录状态
    _ref.read(authProvider.notifier).logout();

    // 更新错误状态
    state = state.copyWith(
      hasUnauthorizedError: true,
      errorMessage: '登录已过期，请重新登录',
    );
  }

  void clearError() {
    state = const ErrorHandlerState();
  }

  void navigateToUnauthorizedPage() {
    // 这里可以通过全局导航器跳转到401页面
    // 由于没有直接的context，我们通过状态变化来触发导航
    state = state.copyWith(hasUnauthorizedError: true);
  }
}

final errorHandlerProvider =
    StateNotifierProvider<ErrorHandlerNotifier, ErrorHandlerState>((ref) {
      return ErrorHandlerNotifier(ref);
    });

// 全局导航器Provider
final globalNavigatorProvider = Provider<GoRouter>((ref) {
  // 这里需要从主应用获取GoRouter实例
  // 暂时返回null，后续可以通过其他方式获取
  throw UnimplementedError('Global navigator not implemented');
});
